package com.coalmine.activiti.flow.service;

import com.alibaba.fastjson.JSONObject;
import com.coalmine.activiti.common.flow.model.FlowTaskComment;
import org.activiti.engine.task.Task;

/**
 * 流程操作服务接口。
 *
 * @author Jerry
 * @date 2021-06-06
 */
public interface CmFlowService {

    /**
     * 保存在线表单的数据，同时启动流程。如果当前用户是第一个用户任务的Assignee，
     * 或者第一个用户任务的Assignee是流程发起人变量，该方法还会自动Take第一个任务。
     *
     * @param processDefinitionId 流程定义Id。
     * @param flowTaskComment     流程审批批注对象。
     * @param taskVariableData    流程任务的变量数据。
     * @param bizId               业务数据主键ID。
     */
    void saveNewAndStartProcess(
            String processDefinitionId,
            FlowTaskComment flowTaskComment,
            JSONObject taskVariableData,
            String bizId);

    /**
     * 更新流程状态，同时接收流程任务。
     *
     * @param task             流程任务。
     * @param flowTaskComment  流程审批批注对象。
     * @param taskVariableData 流程任务的变量数据。
     * @param bizId            业务数据主键ID。
     * @param flowStatus       流程状态。
     */
    void updateAndTakeTask(
            Task task,
            FlowTaskComment flowTaskComment,
            JSONObject taskVariableData,
            String bizId,
            int flowStatus);

}
